package qjc.g_链表;

import com.链表.练习题.ListNode;

public class g1_相交链表 {
    /**
     * 初始化两个指针，分别指向两个链表的头节点，
     * 使用无限循环，因为两个指针最终会相遇（要么在交点，要么在链表末尾），
     * 如果两个指针相遇，返回当前节点（交点或链表末尾），
     * 如果 p1 到达链表末尾，将其指向链表 B 的头节点，否则，p1 向前移动一步，
     * 如果 p2 到达链表末尾，将其指向链表 A 的头节点，否则，p2 向前移动一步
     */
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode p1 = headA;
        ListNode p2 = headB;
        while (true){
            if(p1 == p2){
                return p1;
            }
            if(p1 == null){
                p1 = headB;
            }else {
                p1 = p1.next;
            }
            if(p2 == null){
                p2 = headA;
            }else {
                p2 = p2.next;
            }
        }
    }
}
